package site.ruyi.devclient.client.redis;

import java.io.Closeable;
import java.util.List;
import java.util.Map;
import java.util.Set;

import redis.clients.jedis.ListPosition;
import redis.clients.jedis.Tuple;

/**
 * redis客户端实现接口
 * @author self
 *
 */
public interface IRedisClient extends Closeable{

	/**
	 * 获取客户端名称
	 * @return　客户端名称
	 */
	String getName();

	/**
	 * 获取连接字符串
	 * @return
	 */
	String getConnStr();

	/**
	 * 初始化客户端连接和布局组件
	 */
	boolean init();

	void linsert(int db, String key, ListPosition where, String pivot, String value);

	void rpush(int db, String key, String value);

	void lpush(int db, String key, String value);

	void lset(int db, String key, long index, String value);

	void lpop(int db, String key);

	void rpop(int db, String key);

	void rename(int db, String key, String newName);

	void srem(int db, String key, String item);

	void zrem(int db, String key, String item);

	void lrem(int db, String key, String item);

	void hdel(int db, String key, String item);

	void select(int i);

	String type(int db, String key);

	Set<String> keys(int db, String string);

	String getRedisInfo();

	String getDBInfo(int db);

	Long ttl(int db, String key);

	String get(int db, String key);
	byte[] get(int db, byte[] key);

	Set<String> smembers(int db, String key);
	Set<byte[]> smembers(int db, byte[] key);

	Set<Tuple> zrangeWithScores(int db, String key, int i, int j);

	List<String> lrange(int db, String key, int i, int j);
	List<byte[]> lrange(int db, byte[] key, int i, int j);

	Map<String,String> hgetAll(int db, String key);
	Map<byte[],byte[]> hgetAll(int db, byte[] key);

	void set(int db, String name, String value);

	void sadd(int db, String name, String[] array);

	void sadd(int db, String name, String value);

	void zadd(int db, String name, Map<String, Double> data);

	void lpush(int db, String name, String[] array);

	void hset(int db, String name, Map<String, String> data);

	void del(int db, String key);

	void expire(int db, String key, int expire);

	void persist(int db, String key);

	void flushDB(int db);

	/**
	 * 执行redis命令
	 * @param cmd　命令
	 * @return　命令结果
	 */
	String exeCmd(String cmd);
}
